package com.mh.controller;

import com.mh.common.ResponseResult;
import com.mh.utils.MyRedisCache;
import com.wf.captcha.SpecCaptcha;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@RestController
public class CaptchaController {

    //验证码 redis key
    public static final String CAPTCHA_KEY = "captcha:";

    @Autowired
    private MyRedisCache myRedisCache;

    @GetMapping("/captchaImage")
    public ResponseResult getCode(HttpServletResponse resp) {

        //生成一个验证码图片: 宽度为130像素,高度为48像素,包含4个字符
        SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);
        System.out.println("生成验证码:"+specCaptcha.text());

        //生成需要存储到redis的key+value
        //生成一个唯一的标识符, 并去除其中的短横线（-）
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        //构建redis中的key,将验证码的文本内容存储到Redis中
        //键名为CAPTCHA_CODE_KEY + uuid-->captcha:550e8400e29b41d4a716446655440000
        String key = CAPTCHA_KEY + uuid;
        //specCaptcha.text() 获取验证码的文本内容
        //toLowerCase()转换为小写是为了在验证用户输入的验证码时忽略大小写差异,从而提高用户体验
        String code = specCaptcha.text().toLowerCase();

        //保存到redis
        //设置过期时间为60秒,防止验证码被长期存储-->也可以选择其他时间单位
        myRedisCache.setCacheObject(key,code,60, TimeUnit.SECONDS);

        //创建map集合
        HashMap<String, Object> map = new HashMap<>();
        map.put("uuid", uuid);
        map.put("img", specCaptcha.toBase64());

        return new ResponseResult(200,"验证码获取成功",map);
    }
}
